package com.servengine.localizame;

import com.servengine.user.User;

import java.util.Date;
import java.util.List;

import javax.ejb.Stateless;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;

@Stateless(name="LocalizameManager")
public class LocalizameManagerBean implements LocalizameManagerLocal
{
	@PersistenceContext(unitName="mainPersistenceUnit")
	private EntityManager entityManager;
	public LocalizameManagerBean()
	{
	}
	
	public LocalizamePosicion getUltimaPosicion(User user)
	{
	  try
	  {
			LocalizamePosicion posicion = (LocalizamePosicion)entityManager.createNamedQuery("LocalizamePosicion.findByUser").setParameter("user",user).getSingleResult();
			if (new java.util.Date().getTime()-posicion.getDate().getTime()>24*60*60*1000) //Más de un día, kk.
			{
				entityManager.remove(posicion);
				return null;
			}
			return posicion;
	  } catch (NoResultException e)
	  {
	    return null;
	  }
	}
	public void store(LocalizamePosicion nuevaPosicion)
	{
		LocalizamePosicion posicion = getUltimaPosicion(nuevaPosicion.getUser());
		if (posicion!=null)
		{
			posicion.setDate(nuevaPosicion.getDate()); 
			posicion.setCodigoPostal(nuevaPosicion.getCodigoPostal());
			entityManager.merge(posicion);
		} else
			entityManager.persist(nuevaPosicion);
	}
	public List<LocalizamePosicion> getPosiblesAmiguitos(LocalizamePosicion posicion)
	{
		Date twoDaysAgo = new Date(new Date().getTime()-(48*60*60*1000));//Si su posición es de hace más de 48 horas, probablemente ya no esté donde estaba.
		return (List<LocalizamePosicion>)entityManager.createNamedQuery("LocalizamePosicion.findByCodigoPostalAndDateExceptUser").setParameter("user",posicion.getUser()).setParameter("codigoPostal",posicion.getCodigoPostal()).setParameter("date",twoDaysAgo).getResultList();
	}
}
